
import React, { createContext, useState, useEffect, useCallback } from 'react';
import apiService from '../api/apiService';

// 创建职场沟通助手认证上下文
const authContext = createContext(null);

// 将上下文暴露给模块作用域
if (typeof window !== 'undefined') {
  window.__AUTH_CONTEXT__ = authContext;
}

// 认证提供者组件 - 仅默认导出
// 职场沟通助手认证提供者组件
export default function AuthProvider({ children }) {
  const [user, setUser] = useState(() => {
    // 从localStorage加载用户信息
    try {
      const storedUser = localStorage.getItem('user');
      return storedUser ? JSON.parse(storedUser) : null;
    } catch (error) {
      console.error('加载用户信息失败:', error);
      return null;
    }
  });
  const [loading, setLoading] = useState(true);

  // 初始化API服务
  useEffect(() => {
    apiService.init();
    setLoading(false);
  }, []);

  // 注册功能
  const register = useCallback(async (username, email, password) => {
    setLoading(true);
    try {
      // 使用API服务进行注册
      const response = await apiService.auth.register(username, email, password);
      
      // 保存用户信息
      const newUser = response.user || {
        id: Date.now(),
        username,
        email,
        token: response.token || 'mock-token-' + Math.random().toString(36).substr(2)
      };
      
      localStorage.setItem('user', JSON.stringify(newUser));
      setUser(newUser);
      
      return { success: true, user: newUser };
    } catch (error) {
      console.error('注册失败:', error);
      // 创建包含具体错误信息的错误对象
      const errorObj = new Error(error.message || '注册失败，请检查输入信息');
      errorObj.name = error.name || 'RegisterError';
      throw errorObj;
    } finally {
      setLoading(false);
    }
  }, []);

  // 登录功能
  const login = useCallback(async (email, password) => {
    setLoading(true);
    try {
      // 使用API服务进行登录
      const response = await apiService.auth.login(email, password);
      
      // 保存用户信息
      const loggedInUser = response.user || {
        id: Date.now(),
        username: email.split('@')[0],
        email,
        token: response.token || 'mock-token-' + Math.random().toString(36).substr(2)
      };
      
      localStorage.setItem('user', JSON.stringify(loggedInUser));
      setUser(loggedInUser);
      
      return { success: true, user: loggedInUser };
    } catch (error) {
      console.error('登录失败:', error);
      // 创建包含具体错误信息的错误对象
      const errorObj = new Error(error.message || '邮箱或密码错误');
      errorObj.name = error.name || 'LoginError';
      throw errorObj;
    } finally {
      setLoading(false);
    }
  }, []);

  // 登出功能
  const logout = useCallback(async () => {
    setLoading(true);
    try {
      // 使用API服务进行登出
      await apiService.auth.logout();
    } catch (error) {
      console.error('登出时通知服务器失败:', error);
      // 即使通知失败，仍然清除本地状态
    } finally {
      localStorage.removeItem('user');
      setUser(null);
      setLoading(false);
    }
    return { success: true };
  }, []);

  const value = {
    user,
    loading,
    register,
    login,
    logout,
    // 暴露连接状态订阅方法
    subscribeToConnectionStatus: apiService.connection.subscribeToConnectionStatus
  };

  return (
    <authContext.Provider value={value}>
      {children}
    </authContext.Provider>
  );
}